﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

//int main()
//{
//	printf("file:%s, time:%s\n", __FILE__, __TIME__);
//	printf("line:%d, date:%s\n", __LINE__, __DATE__);
//	//printf("stdc:%d\n", __STDC__);
//	printf("function:%s\n", __FUNCTION__);
//	return 0;
//}


//#define CASE break;case
//
//int main()
//{
//	int input = 0;
//	printf("请输入今天是星期几：");
//	scanf("%d", &input);
//	switch (input)
//	{
//	CASE 1:
//		printf("星期一\n");
//	CASE 2:
//		printf("星期二\n");
//		break;
//	CASE 3:
//		printf("星期三\n");
//		break;
//	CASE 4:
//		printf("星期四\n");
//		break;
//	CASE 5:
//		printf("星期五\n");
//		break;
//	CASE 6:
//		printf("星期六\n");
//		break;
//	CASE 7:
//		printf("星期日\n");
//		break;
//	default:
//		break;
//	}
//	return 0;
//}


//#define FOREVER for( ; i < 10; i++)
//
//int main()
//{
//	int i = 0;
//	FOREVER
//	{
//		printf("%d ", i);
//	}
//	return 0;
//}


//#define MUTI(x) x*x
//#define MUT(x) (x)*(x)
//
//int main()
//{
//	int n = 5;
//	printf("%d\n", MUTI(n + 1));
//	//将 muti 替换为 5 + 1 * 5 + 1
//	printf("%d\n", MUT(n + 1));
//	//将 mut 替换为 （5 + 1）*（5 + 1）
//	return 0;
//}


//#define DEBUG_PRINT printf("file:%s \nline:%d\ndate:%s \ntime:%s\n", \
//						__FILE__, __LINE__, __DATE__, __TIME__ )
//int main()
//{
//	DEBUG_PRINT;
//	return 0;
//}


////字符串的连接
//int main()
//{
//	char* p = "hello" " world\n";
//	printf("hello" " world\n");
//	printf("%s", p);
//	return 0;
//}


//#define PRINT(FORMAT, VALUE) printf("the value is "FORMAT"\n", VALUE)
//
//int main()
//{
//	PRINT("%d", 10);
//	return 0;
//}


////将传递的参数不会直接转化为对应的值而是直接作为字符串插入
//#define PRINT(FORMAT, VALUE) printf("the value of "#VALUE" is "FORMAT"\n", VALUE)
//
//int main()
//{
//	int i = 9;
//	PRINT("%d", i+10);
//	return 0;
//}

//#define STR(s) (#s"\n")
//
//int main()
//{
//	printf("Hello world\n");
//	printf(STR(Hello world));
//	return 0;
//}

//#define STR(s) ("1234"  #s "5678" "\n")
// 
//int main()
//{
//	printf(STR(hello));
//	return 0;
//}


////##只能用在宏的定义中
//#define EXP(x, y) (x##e##y)
//
//int main()
//{
//	printf("%e\n", EXP(1, 3));
//	return 0;
//}

/*
//将前后的分离文本片段拼成一串文本
#define SUM(num, value) sum##num += value

int main()
{
	printf("%d\n", SUM(3, 10));
	return 0;
}
*/


//int main()
//{
//	
//	return 0;
//}


////++的副作用
//#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
//
//int main()
//{
//	int x = 5;
//	int y = 8;
//	int z = MAX(x++, y++); //带副作用
//	printf("x=%d y=%d z=%d\n", x, y, z);
//	x = 5;
//	y = 8;
//	int w = MAX(x+1, y+1); //不带副作用
//	printf("x=%d y=%d w=%d\n", x, y, w); 
//	return 0;
//}


////宏可以出现类型
//#define MALLOC(num, type)
//int main()
//{
//	MALLOC(20, int);
//	return 0;
//}


////#define __DEBUG__
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//		#ifdef __DEBUG__
//		printf("%d ", arr[i]);
//		#else
//		printf("%d ", i);
//		#endif
//	}
//	return 0;
//}